package com.caioweb.osa.mb;

import static com.caio.svn.Configuracoes.TXT_DADOS;
import static com.caio.svn.Configuracoes.TXT_ESTRUTURA;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;

import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SelectableDataModel;
import org.primefaces.model.StreamedContent;

import com.caioweb.osa.dao.DAO;
import com.caioweb.osa.dao.HistoricoDAO;
import com.caioweb.osa.modelo.Cliente;
import com.caioweb.osa.modelo.DataModelHistorico;
import com.caioweb.osa.modelo.Historico;
import com.caioweb.osa.modelo.TipoAmbienteCliente;
import com.caioweb.osa.transacoes.interceptor.Transactional;


@ConversationScoped
public class HistoricoBean  implements Serializable,SelectableDataModel<Historico>{
	@Inject
	private Historico historico;
	@Inject
	private HistoricoDAO dao;
	@Inject
	private DAO<Cliente> daoCliente;
	@Inject
	private DAO<TipoAmbienteCliente> daoTpAmbienteCliente;
	@Inject
	private Conversation conversation;
	
	private Long idTpAmbienteCliente;
	private Date dataFinal;
	private Date dataInicial;
	private List<Historico> historicos;
	private LazyDataModel<Historico> dataModel;
	private List<Historico> historicoFiltrado;
	private List<TipoAmbienteCliente> ambienteClientes;

	
	
    private String tpAmbiente;
    private Integer idCliente;

	
	@Transactional
	public void pesquisa(){
		this.conversation.begin();
		this.dataModel = new DataModelHistorico();
		this.dataModel.setRowCount(dao.contaPesquisa(tpAmbiente, dataInicial, dataFinal,idCliente,idTpAmbienteCliente));
		this.historicos = dao.pesquisa(tpAmbiente, dataInicial, dataFinal,idCliente,idTpAmbienteCliente);
		
	}
	
	public String redireciona(Long id){
		this.conversation.end();
	    return "historicoDetalhado?faces-redirect=true&amp;id="+ id;
	}
	

	public Historico getHistorico() {
		return historico;
	}

	public void setHistorico(Historico historico) {
		this.historico = historico;
	}

	public List<Historico> getHistoricos() {
		
		return historicos;
	}

	public void setHistoricos(List<Historico> historicos) {
		this.historicos = historicos;
	}

	public LazyDataModel<Historico> getDataModel() {
		return dataModel;
	}

	public void setDataModel(LazyDataModel<Historico> dataModel) {
		this.dataModel = dataModel;
	}

	public List<Historico> getHistoricoFiltrado() {
		return historicoFiltrado;
	}

	public void setHistoricoFiltrado(List<Historico> historicoFiltrado) {
		this.historicoFiltrado = historicoFiltrado;
	}


	
    public StreamedContent getFileEstrutura() throws FileNotFoundException {
        InputStream stream = new FileInputStream(this.historico.getArquivo()+ TXT_ESTRUTURA);  
        StreamedContent fileEstrutura = new DefaultStreamedContent(stream, "application/txt",  TXT_ESTRUTURA);
        return fileEstrutura;    
	}    
    

    
    
    


	
	
    public StreamedContent fileDados(String teste) throws FileNotFoundException {
      	 InputStream stream = new FileInputStream(teste+ TXT_DADOS);  
          StreamedContent fileDados = new DefaultStreamedContent(stream, "application/txt", TXT_DADOS);
   		return fileDados;
   	}
       
       public StreamedContent fileEstrutura(String teste) throws FileNotFoundException {
           InputStream stream = new FileInputStream(teste+ TXT_ESTRUTURA);  
           StreamedContent fileEstrutura = new DefaultStreamedContent(stream, "application/txt",  TXT_ESTRUTURA);
           return fileEstrutura;    
   	}

	@Override
	public Historico getRowData(String arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Object getRowKey(Historico arg0) {
		// TODO Auto-generated method stub
		return null;
	} 
	
	public String formataData(Date date){
		  if(date != null){
			SimpleDateFormat sd = new SimpleDateFormat("dd/MM/yyyy");
			return sd.format(date.getTime());	
		  }
		  return null;
	}

	public Date getDataFinal() {
		return dataFinal;
	}

	public void setDataFinal(Date dataFinal) {
		this.dataFinal = dataFinal;
	}

	public Date getDataInicial() {
		return dataInicial;
	}

	public void setDataInicial(Date dataInicial) {
		this.dataInicial = dataInicial;
	}

	public String getTpAmbiente() {
		return tpAmbiente;
	}

	public void setTpAmbiente(String tpAmbiente) {
		this.tpAmbiente = tpAmbiente;
	}

	public Integer getIdCliente() {
		return idCliente;
	}

	public void setIdCliente(Integer idCliente) {
		this.idCliente = idCliente;
	}
	
	
	public List<String> getTipoAmbientes(){
		ArrayList<String> tipoAmbientes = new ArrayList<String>();
		tipoAmbientes.add(AmbienteBean.EXTERNO);
		tipoAmbientes.add(AmbienteBean.INTERNO);
		return tipoAmbientes;
	}
	
	@Transactional
	public List<Cliente> getClientes(){
		List<Cliente> clientes = daoCliente.listaTodos();
		Collections.sort(clientes);
		return clientes;
	}
	@Transactional
	public List<TipoAmbienteCliente> getAmbienteClientes() {
		this.ambienteClientes = daoTpAmbienteCliente.listaTodos();
		return ambienteClientes;
	}

	public void setAmbienteClientes(List<TipoAmbienteCliente> ambienteClientes){

		this.ambienteClientes = ambienteClientes;
	}

	public Long getIdTpAmbienteCliente() {
		return idTpAmbienteCliente;
	}

	public void setIdTpAmbienteCliente(Long idTpAmbienteCliente) {
		this.idTpAmbienteCliente = idTpAmbienteCliente;
	}
	
	
	
	
	
}
